/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package itm.dao.administracion;

import itm.exception.DAOException;
import itm.vo.administracion.TipoPropiedadIntelectualVO;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author USUARIO
 */
public class TipoPropiedadIntelectualDAO {

    private CallableStatement callStmt = null;
    private ResultSet res = null;
    private String sql = "";
    Connection dbConexion;

    public TipoPropiedadIntelectualDAO(Connection dbConexion) {
        this.dbConexion = dbConexion;
    }

    /**
     * Metodo que consulta los Tipos de Propiedad Intelectual existentes
     * @param intelectualVO
     * @return
     * @throws itm.exception.DAOException
     */
    public List<TipoPropiedadIntelectualVO> consultarTipoPropiedadIntelectual(TipoPropiedadIntelectualVO intelectualVO) throws DAOException {
        List<TipoPropiedadIntelectualVO> intelectualVOs = new ArrayList<TipoPropiedadIntelectualVO>();
        TipoPropiedadIntelectualVO propiedadIntelectualVO;
        sql = "{call PRC_ITM_CONSULTAR_TIPO_PROPIEDAD_INTELECTUAL(?)}";
        try {
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, intelectualVO.getDescripcion());
            res = callStmt.executeQuery();
            while (res.next()) {
                propiedadIntelectualVO = new TipoPropiedadIntelectualVO();
                propiedadIntelectualVO.setIdTipoPropiedad(res.getLong(1));
                propiedadIntelectualVO.setDescripcion(res.getString(2));
                intelectualVOs.add(propiedadIntelectualVO);
            }
            return intelectualVOs;
        } catch (SQLException ex) {
            ex.printStackTrace();
            Logger.getLogger(TipoPropiedadIntelectualDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al Consultar", ex);
        }
    }

    public String crearTipoPropiedadIntelectual(TipoPropiedadIntelectualVO intelectualVO) throws DAOException {
        String mensaje = "";
        String error = "";
        sql = "{call PRC_ITM_CREAR_TIPO_PROPIEDAD_INTELECTUAL(?,?,?)}";
        try {
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, intelectualVO.getDescripcion());
            callStmt.registerOutParameter(2, java.sql.Types.VARCHAR);
            callStmt.registerOutParameter(3, java.sql.Types.VARCHAR);
            callStmt.execute();
            mensaje = callStmt.getString(2);
            error = callStmt.getString(3);
            if (error != null) {
                throw new DAOException(error);
            }
            return mensaje;
        } catch (SQLException ex) {
            ex.printStackTrace();
            Logger.getLogger(TipoPropiedadIntelectualDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al Crear", ex);
        }
    }

    public String modificarTipoPropiedadIntelectual(TipoPropiedadIntelectualVO intelectualVO) throws DAOException {
        String mensaje = "";
        String error = "";
        sql = "{call PRC_ITM_ACTUALIZAR_TIPO_PROPIEDAD_INTELECTUAL(?,?,?,?)}";
        try {
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setString(1, intelectualVO.getDescripcion());
            callStmt.setLong(2, intelectualVO.getIdTipoPropiedad());
            callStmt.registerOutParameter(3, java.sql.Types.VARCHAR);
            callStmt.registerOutParameter(4, java.sql.Types.VARCHAR);
            callStmt.execute();
            mensaje = callStmt.getString(3);
            error = callStmt.getString(4);
            if (error != null) {
                throw new DAOException(error);
            }
            return mensaje;
        } catch (SQLException ex) {
            ex.printStackTrace();
            Logger.getLogger(TipoPropiedadIntelectualDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al Modificar", ex);
        }
    }

    public String eliminarTipoPropiedadIntelectual(TipoPropiedadIntelectualVO intelectualVO) throws DAOException {
        String mensaje = "";
        String error = "";
        sql = "{call PRC_ITM_ELIMINAR_TIPO_PROPIEDAD_INTELECTUAL(?,?,?)}";
        try {
            callStmt = dbConexion.prepareCall(sql);
            callStmt.setLong(1, intelectualVO.getIdTipoPropiedad());
            callStmt.registerOutParameter(2, java.sql.Types.VARCHAR);
            callStmt.registerOutParameter(3, java.sql.Types.VARCHAR);
            callStmt.execute();
            mensaje = callStmt.getString(2);
            error = callStmt.getString(3);
            if (error != null) {
                throw new DAOException(error);
            }
            return mensaje;
        } catch (SQLException ex) {
            ex.printStackTrace();
            Logger.getLogger(TipoPropiedadIntelectualDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new DAOException("Error al Eliminar", ex);
        }
    }
}
